Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO


■APIC(Advanced Programmable Interrupt Controller)

対象	マルチプロセッサ搭載機
	75MHz以上のPentiumプロセッサ搭載機
解説  o APICとは32bitOS用の割り込みコントローラであり、マルチプロセッサ環境で
	の割り込みを扱う。
      o APICは、各CPUに対して1個ずつのローカルユニットと、I/Oからの割り込みを
	取りまとめるI/Oユニットで使用される。(図1)
      o 現在のところ、PC-9800シリーズにはこのAPIC(82489DX)がI/Oユニットとして
	搭載された機種はないが、75MHz以上のPentiumプロセッサ(P54C,P55C)では、
	ローカルAPICがCPUに内蔵されている。
      o APICの機能は、現在のところPC-9800シリーズでは使用されていない。
      o CPUがローカルAPICを内蔵しているかどうかは、EAX=00000001hでCPUID命令を
	実行したとき、EDXレジスタに得られる値のbit9が1であるかどうかで判別で
	きる。
      u CPUIDが0521h,0522h,0524hではP54Cでは、TR12レジスタのbit4を1にすること
	によってCPUに内蔵されたローカルAPICをディセーブルにすることができる。

	図1: ローカルユニットとI/Oユニット
	---------------------------------------------------------------------

	   +----------+       +----------+       +----------+
	   |プロセッサ|       |プロセッサ|       |プロセッサ|
	   +----+-+---+       +----+-+---+       +----+-+---+
	        | |                | |                | |    
	Register| |PINT    Register| |PINT    Register| |PINT
	 Access | |PNMI     Access | |PNMI     Access | |PNMI
	        | |                | |                | |    
	  +-----+-+----+     +-----+-+----+     +-----+-+----+
	  |APIC 82489DX|     |APIC 82489DX|     |APIC 82489DX|
	  |ローカル    |     |ローカル    |     |ローカル    |
	  |    ユニット|     |    ユニット|     |    ユニット|
	  +------+-----+     +------+-----+     +------+-----+
	         |                  |                  |      
	         |                  |                  |       ICCバス
	←-------+----------+-------+------------------+------------→
	                    |
	                    |ID=0
	+-------+    +------+-----+
	|各種I/O+----|APIC 82489DX|
	+-------+    | I/Oユニット|
	             +------------+
	---------------------------------------------------------------------

      o APICは、通常メモリマップトI/Oでアクセスされる。ローカルユニットは、
	メモリ空間のFEE00000h〜にマッピングされる。I/OユニットはFEC00000h〜
	にマッピングされる。I/Oユニットが複数個ある場合は、それぞれのAPICは
	表1のようにマッピングされる。

	表1: I/Oユニットのマッピングアドレス
	--------+-----------------------
	番号	|アドレス
	--------+-----------------------
	#0	|FEC00000h〜
	#1	|FEC01000h〜
	#2	|FEC02000h〜
	:	|    :
	:	|    :
	--------+-----------------------

	表2: I/Oユニットのレジスタ1
	---------------+-----+------------------------------------
	アドレス[9:4]  | R/W |レジスタ名
	---------------+-----+------------------------------------
	00 0000b       |WRITE|I/O Register Select
	00 0001b       | R/W |I/O Windows Register
	---------------+-----+------------------------------------

	表3: I/Oユニットのレジスタ2
	---------------+-----+------------------------------------
	アドレス[7:0]  | R/W |レジスタ名
	---------------+-----+------------------------------------
	00000000b      | R/W |I/O Unit ID Register
	00000001b      |READ |Version Register
	00010000b      | R/W |Redirection Table[0](31:0)
	00010001b      | R/W |Redirection Table[0](63:32)
	00010010b      | R/W |Redirection Table[1](31:0)
	00010011b      | R/W |Redirection Table[1](63:32)
	00010100b      | R/W |Redirection Table[2](31:0)
	00010101b      | R/W |Redirection Table[2](63:32)
	00010110b      | R/W |Redirection Table[3](31:0)
	00010111b      | R/W |Redirection Table[3](63:32)
	00011000b      | R/W |Redirection Table[4](31:0)
	00011001b      | R/W |Redirection Table[4](63:32)
	00011010b      | R/W |Redirection Table[5](31:0)
	00011011b      | R/W |Redirection Table[5](63:32)
	00011100b      | R/W |Redirection Table[6](31:0)
	00011101b      | R/W |Redirection Table[6](63:32)
	00011110b      | R/W |Redirection Table[7](31:0)
	00011111b      | R/W |Redirection Table[7](63:32)
	00100000b      | R/W |Redirection Table[8](31:0)
	00100001b      | R/W |Redirection Table[8](63:32)
	00100010b      | R/W |Redirection Table[9](31:0)
	00100011b      | R/W |Redirection Table[9](63:32)
	00100100b      | R/W |Redirection Table[10](31:0)
	00100101b      | R/W |Redirection Table[10](63:32)
	00100110b      | R/W |Redirection Table[11](31:0)
	00100111b      | R/W |Redirection Table[11](63:32)
	00101000b      | R/W |Redirection Table[12](31:0)
	00101001b      | R/W |Redirection Table[12](63:32)
	00101010b      | R/W |Redirection Table[13](31:0)
	00101011b      | R/W |Redirection Table[13](63:32)
	00101100b      | R/W |Redirection Table[14](31:0)
	00101101b      | R/W |Redirection Table[14](63:32)
	00101110b      | R/W |Redirection Table[15](31:0)
	00101111b      | R/W |Redirection Table[15](63:32)
	---------------+-----+------------------------------------

	表4: ローカルユニットのレジスタ
	---------------+-----+------------------------------------
	アドレス[9:4]  | R/W |レジスタ名
	---------------+-----+------------------------------------
	000010b        | R/W |Local Unit ID Register
	000011b        |READ |Version Register
	000100b        |     |Reserved
	000101b        |     |Reserved
	000110b        |     |Reserved
	000111b        |     |Reserved
	001000b        | R/W |Task Priority Register
	001001b        |     |Reserved
	001010b        |     |Reserved
	001011b        | R/W |EOI Register
	001100b        |READ |Remote Register
	001101b        | R/W |Logical Destination Register
	001110b        | R/W |Destination Format Register
	001111b        | R/W |Spurious Vector Register
	010000b        |READ |ISR(31:0)
	010001b        |READ |ISR(63:32)
	010010b        |READ |ISR(95:64)
	010011b        |READ |ISR(127:96)
	010100b        |READ |ISR(159:128)
	010101b        |READ |ISR(191:160)
	010110b        |READ |ISR(223:192)
	010111b        |READ |ISR(255:224)
	011000b        |READ |TMR(31:0)
	011001b        |READ |TMR(63:32)
	011010b        |READ |TMR(95:64)
	011011b        |READ |TMR(127:96)
	011100b        |READ |TMR(159:128)
	011101b        |READ |TMR(191:160)
	011110b        |READ |TMR(223:192)
	011111b        |READ |TMR(255:224)
	100000b        |READ |IRR(31:0)
	100001b        |READ |IRR(63:32)
	100010b        |READ |IRR(95:64)
	100011b        |READ |IRR(127:96)
	100100b        |READ |IRR(159:128)
	100101b        |READ |IRR(191:160)
	100110b        |READ |IRR(223:192)
	100111b        |READ |IRR(255:224)
	101000〜101111b|     |Reserved
	110000b        | R/W |Interrupt Command Register(31:0)
	110001b        | R/W |Interrupt Command Register(63:32)
	110010b        | R/W |Local Vector Table[Timer]
	110011b        |     |Reserved
	110100b        |     |Reserved
	110101b        | R/W |Local Vector Table[Local int 0]
	110110b        | R/W |Local Vector Table[Local int 1]
	110111b        |     |Reserved
	111000b        | R/W |Initial Count Register
	111010b        |READ |Current Count Register
	111011b        |     |Reserved
	111100b        |     |Reserved
	111101b        |     |Reserved
	111110b        | R/W |Divider Confituration Register
	111111b        |     |Reserved
	---------------+-----+------------------------------------